package controller;

import domain.Jobholder;
import domain.Recruiter;
import domain.Resume;
import domain.Work;
import service.ResumeService;
import service.impl.ResumeServiceImpl;
import ui.RecruiterUI;
import ui.ResumeUI;
import ui.WorkUI;
import util.CheckUtil;
import util.InputUtil;
import util.PrintUtil;
import util.SessionUtil;

import java.util.List;

public final class ResumeController {
    private ResumeController() {
    }

    private static final ResumeService resumeService = ResumeServiceImpl.getINSTANCE();

    public static void run() {
        index();
    }

    /**
     * 简历首页
     */
    private static void index() {

        /*
         * 1、添加简历 addResume();
         * 2、查看简历 viewResume();
         * 3、修改简历 manageResumeInformation();
         * 4、删除简历 deleteResume();
         * 0、退出登录
         */
        while (true) {
            ResumeUI.index();
            switch (InputUtil.getInputInteger("请输入选项：",0,4)){
                case 1:
                    addResume();
                    break;
                case 2:
                    viewResume();
                    break;
                case 3:
                    manageResumeInformation();
                    break;
                case 4:
                    deleteResume();
                    break;
                case 0:
                    PrintUtil.printString("返回上级！");
                    return;
            }
        }
    }

    /**
     * 添加简历
     */
    public static void addResume() {
        /*
         * Resume resume = new resume;
         * ResumeUI.resumeInformation(resume);
         * 请选择需要添加的项
         * 1、添加姓名
         * 2、添加电话号码，需要验证电话号码有效
         * 3、添加性别
         * 4、添加年龄
         * 5、添加邮箱
         * 6、添加岗位名称
         * 7、添加教育经历
         * 8、添加项目经历
         * 9、添加获奖经历
         * 10、添加掌握技能
         * 11、添加自我评价
         * 0、返回上级
         * ResumeService.addResume(resume);
         */
        Resume resume = new Resume();
        resume.setName(InputUtil.getInputText("请输入姓名："));
        String tel;
        while (true){
            tel = InputUtil.getInputText("请输入电话号码：");
            if(!CheckUtil.checkTel(tel)){
                PrintUtil.printString("输入格式有误！请重新输入");
            }else break;
        }
        resume.setTel(tel);
        resume.setSex(InputUtil.getInputInteger("请输入性别(男:0 女:1):", 0, 1));
        resume.setAge(InputUtil.getInputInteger("请输入年龄：",18,65));
        String email;
        while (true){
            email = InputUtil.getInputText("请输入邮箱：");
            if(!CheckUtil.checkEmail(email)){
                PrintUtil.printString("输入格式有误！请重新输入");
            }else break;
        }
        resume.setEmail(email);
        resume.setWorkName(InputUtil.getInputText("请输入岗位名称："));
        resume.setEducation(InputUtil.getInputText("请输入教育经历："));
        resume.setProject(InputUtil.getInputText("请输入项目经历："));
        resume.setAward(InputUtil.getInputText("请输入获奖经历："));
        resume.setSkill(InputUtil.getInputText("请输入掌握技能："));
        resume.setSelfEvaluation(InputUtil.getInputText("请输入自我评价："));
        Jobholder jobholder = SessionUtil.getJobholder();
        resume.setJobholderId(jobholder.getId());
        if(resumeService.addResume(resume) == 1) PrintUtil.printString("添加简历成功");
        else PrintUtil.printString("添加简历失败");
    }

    /**
     * 查看简历
     */
    public static void viewResume() {

        /*
         * Jobholder jobholder = SessionUtil.getJobholder();
         * 显示所有投递的简历
         * List<Resume> resumes = resumeService.selectByJobholderId();
         * ResumeUI.showResumeList(resumes);
         * 1、输入简历编号，编号为0时返回，输入在范围内的编号，获取选中的工作调用Resume resume = resumes.get();
         * 2、显示工作详细信息调用ResumeUI.showDetailResume(resume);
         */
        Jobholder jobholder = SessionUtil.getJobholder();
        List<Resume> resumes = resumeService.selectByJobholderId(jobholder.getId());
        while (true){
            ResumeUI.showResumeList(resumes);
            PrintUtil.printString("请输入简历编号查看详细内容或输入0返回：");
            int judge = InputUtil.askForInt();
            if(judge==0)    return;
            Resume resume = resumes.get(judge-1);
            ResumeUI.showDetailResume(resume);
            int state = resume.getPassState();
            if (state == 1) PrintUtil.printString("简历通过");
            else if(state == 2) PrintUtil.printString("简历未通过");
            else PrintUtil.printString("待查看");
            String sign = InputUtil.getInputText("是否需要继续查看其他简历？（YES/NO）");
            if(sign.equals("NO")) return;
        }
    }

    /**
     * 修改简历
     */
    public static void manageResumeInformation() {
        /*
         * ResumeUI.resumeInformation(resume);
         * 请选择需要修改的项
         * 1、修改姓名
         * 2、修改电话号码，先输入原电话号码，判断电话号码是否一致，一致再输入新电话号码
         * 3、修改性别
         * 4、修改年龄
         * 5、修改邮箱
         * 6、修改岗位名称
         * 7、修改教育经历
         * 8、修改项目经历
         * 9、修改获奖经历
         * 10、修改掌握技能
         * 11、修改自我评价
         * 0、返回上级
         * ResumeService.resetResume(resume);
         */
        Jobholder jobholder = SessionUtil.getJobholder();
        //显示所有已添加的简历
        List<Resume> resumes = resumeService.selectByJobholderId(jobholder.getId());
        while (true){
            ResumeUI.showResumeList(resumes);
            //获取需要修改的简历编号
            PrintUtil.printString("请输入需要修改的简历编号或输入0返回：");
            int judge = InputUtil.askForInt();
            if(judge==0)    break;
            Resume resume = resumes.get(judge-1);
            ok:
            //修改选中的简历
            while (true){
                //展示已选择简历的信息
                ResumeUI.showDetailResume(resume);
                switch (InputUtil.getInputInteger("请输入需要修改的项或输入0返回上级：",0,11)){
                    case 1:
                        resume.setName(InputUtil.getInputText("请输入新的姓名："));
                        break;
                    case 2:
                        String tel;
                        while (true){
                            tel = InputUtil.getInputText("请输入新的电话号码：");
                            if(!CheckUtil.checkTel(tel)){
                                PrintUtil.printString("输入格式有误！请重新输入");
                            }else break;
                        }
                        resume.setTel(tel);
                        break;
                    case 3:
                        resume.setSex(InputUtil.getInputInteger("请输入新的性别(男:0 女:1):", 0, 1));
                        break;
                    case 4:
                        resume.setAge(InputUtil.getInputInteger("请输入新的年龄：",18,65));
                        break;
                    case 5:
                        String email;
                        while (true){
                            email = InputUtil.getInputText("请输入新的邮箱：");
                            if(!CheckUtil.checkTel(email)){
                                PrintUtil.printString("输入格式有误！请重新输入");
                            }else break;
                        }
                        resume.setEmail(email);
                        break;
                    case 6:
                        resume.setWorkName(InputUtil.getInputText("请输入新的岗位名称："));
                        break;
                    case 7:
                        resume.setEducation(InputUtil.getInputText("请输入新的教育经历："));
                        break;
                    case 8:
                        resume.setProject(InputUtil.getInputText("请输入新的项目经历："));
                        break;
                    case 9:
                        resume.setAward(InputUtil.getInputText("请输入新的获奖经历："));
                        break;
                    case 10:
                        resume.setSkill(InputUtil.getInputText("请输入新的掌握技能："));
                        break;
                    case 11:
                        resume.setSelfEvaluation(InputUtil.getInputText("请输入新的自我评价："));
                        break;
                    case 0:
                        if(resumeService.resetResume(resume)==1) PrintUtil.printString("更新简历成功");
                        else PrintUtil.printString("更新简历失败");
                        break ok;
                }
            }
            //判断是否需要继续修改其他工作
            String sign = InputUtil.getInputText("是否需要继续修改其他简历？（YES/NO）");
            if(sign.equals("YES")) continue;
            if(sign.equals("NO")) return;
        }
    }

    /**
     * 删除简历
     */
    public static void deleteResume() {

        /*
         * Jobholder jobholder = SessionUtil.getJobholder();
         * 显示所有投递的简历
         * List<Resume> resumes = resumeService.selectByJobholderId();
         * ResumeUI.showResumeList(resumes);
         * 1、输入简历编号，编号为0时返回，输入在范围内的编号，获取选中的工作调用Resume resume = resumes.get();
         * 2、显示工作详细信息调用ResumeUI.showDetailResume(resume);
         * 3、询问是否删除该简历
         * 4、删除的话设置del为1则为删除
         */
        Jobholder jobholder = SessionUtil.getJobholder();
        List<Resume> resumes = resumeService.selectByJobholderId(jobholder.getId());
        while (true){
            ResumeUI.showResumeList(resumes);
            PrintUtil.printString("请输入需要删除的简历编号查看详细内容或输入0返回：");
            int judge = InputUtil.askForInt();
            if(judge==0)    return;
            Resume resume = resumes.get(judge-1);
            ResumeUI.showDetailResume(resume);
            String sign = InputUtil.getInputText("是否删除该简历？（YES/NO）");
            if(sign.equals("YES")) {
                PrintUtil.printString("删除成功！");
                resume.setDel(1);
            }
            String sign2 = InputUtil.getInputText("是否需要继续删除其他简历？（YES/NO）");
            if(sign2.equals("NO")) return;
        }
    }
}

